]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Use ClutterKeymap to detect caps lock state changes
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 10 Jan 2019 22:19:17 +0000 (23:19 +0100)
committerCarlos Garnacho <mrgarnacho@gmail.com>
Tue, 29 Jan 2019 16:03:22 +0000 (16:03 +0000)
This drops usage of Gtk/X11, replacing it with code that is dependent
of the Clutter backend in use. Another positive side effect is that
the keymap state will now be correct on wayland, since there were no
guarantees that X11 key state would reflect the current reality.

https://bugzilla.gnome.org/show_bug.cgi?id=762881

src/st/st-entry.c

index 909d0377cad5e307c3b690a99e174bab86519a76..d23eeb2c76ba09c0633636c4f53b17d8acc5e4b7 100644 (file)
@@ -239,15 +239,15 @@ remove_capslock_feedback (StEntry *entry)
 }
 
 static void
-keymap_state_changed (GdkKeymap *keymap,
-                      gpointer   user_data)
+keymap_state_changed (ClutterKeymap *keymap,
+                      gpointer       user_data)
 {
   StEntry *entry = ST_ENTRY (user_data);
   StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
 
   if (clutter_text_get_password_char (CLUTTER_TEXT (priv->entry)) != 0)
     {
-      if (gdk_keymap_get_caps_lock_state (keymap))
+      if (clutter_keymap_get_caps_lock_state (keymap))
         show_capslock_feedback (entry);
       else
         remove_capslock_feedback (entry);
@@ -259,11 +259,11 @@ st_entry_dispose (GObject *object)
 {
   StEntry *entry = ST_ENTRY (object);
   StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
-  GdkKeymap *keymap;
+  ClutterKeymap *keymap;
 
   cogl_clear_object (&priv->text_shadow_material);
 
-  keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
+  keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
   g_signal_handlers_disconnect_by_func (keymap, keymap_state_changed, entry);
 
   G_OBJECT_CLASS (st_entry_parent_class)->dispose (object);
@@ -563,11 +563,11 @@ clutter_text_focus_in_cb (ClutterText  *text,
                           ClutterActor *actor)
 {
   StEntry *entry = ST_ENTRY (actor);
-  GdkKeymap *keymap;
+  ClutterKeymap *keymap;
 
   st_entry_update_hint_visibility (entry);
 
-  keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
+  keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
   keymap_state_changed (keymap, entry);
   g_signal_connect (keymap, "state-changed",
                     G_CALLBACK (keymap_state_changed), entry);
@@ -581,7 +581,7 @@ clutter_text_focus_out_cb (ClutterText  *text,
                            ClutterActor *actor)
 {
   StEntry *entry = ST_ENTRY (actor);
-  GdkKeymap *keymap;
+  ClutterKeymap *keymap;
 
   st_widget_remove_style_pseudo_class (ST_WIDGET (actor), "focus");
 
@@ -590,7 +590,7 @@ clutter_text_focus_out_cb (ClutterText  *text,
   clutter_text_set_cursor_visible (text, FALSE);
   remove_capslock_feedback (entry);
 
-  keymap = gdk_keymap_get_for_display (gdk_display_get_default ());
+  keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
   g_signal_handlers_disconnect_by_func (keymap, keymap_state_changed, entry);
 }